Skip to content

feat(action): add dry-run input + make action-smoke side-effect-free#16

Merged
lesnik512 merged 8 commits into
mainfrom
feat/action-yml-dry-run
Jun 9, 2026
Merged

feat(action): add dry-run input + make action-smoke side-effect-free#16
lesnik512 merged 8 commits into
mainfrom
feat/action-yml-dry-run

Conversation

@lesnik512

Copy link
Copy Markdown
Member

Summary

  • Adds dry-run boolean input to action.yml (default 'false'). When true, the composite passes --dry-run to semvertag tag; semvertag skips provider.create_tag and emits status="dry_run", which the existing case block normalizes to public status="no-bump".
  • Switches ci.yml's action-smoke job to use dry-run: 'true' and drops permissions: contents: write. The job can no longer push real tags even under regression — GitHub would 403 first.
  • Reduces the action-smoke assertion to a single line: status == no-bump. Under dry-run this is guaranteed true; if action.yml's dry-run wiring breaks, status becomes created and the assertion fails loudly.
  • Bumps semvertag version floor in action.yml from >=0.3.1,<1 to >=0.5.0,<1 (the release that ships --dry-run).
  • Documents the new input under a ## Preview the next bump section in docs/providers/github.md.
  • Drive-by: README + pyproject docs URL fix to the new modern-python.org subdomain (a leftover from PR ci: deploy mkdocs via GitHub Actions #14).

Spec: planning/specs/2026-06-09-action-yml-dry-run-design.md. Predecessor: PR #15 (semvertag CLI --dry-run flag; shipped as 0.5.0).

Motivation

PR #14 surfaced the underlying smell: action-smoke ran with contents: write against main HEAD via the GitHub API, so whenever main HEAD was an untagged feat//bugfix/ merge, the smoke test minted and pushed a real release tag from a PR's CI run. PR A landed the CLI half (semvertag tag --dry-run); this PR wires it through the composite action and switches action-smoke to use it. After merge, action-smoke is structurally side-effect-free.

Test plan

  • just lint-ci passes
  • just test passes (428 tests, 100% coverage — no Python source changed)
  • mkdocs build --strict passes
  • PR's own action-smoke job passes — confirms end-to-end wiring of the new dry-run input
  • After merge: confirm action-smoke on the NEXT PR (whatever it is) still passes — verifies the contract holds across consecutive PRs

🤖 Generated with Claude Code

lesnik512 and others added 8 commits June 9, 2026 16:40
Wires --dry-run through the composite action and switches the
action-smoke job to use it. Drops contents: write so the smoke
test cannot push real tags even under regression. Bumps version
floor in action.yml from >=0.3.1 to >=0.5.0 to require the
semvertag release that ships --dry-run.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5-task plan: URL fixes, action.yml input + version floor, ci.yml
action-smoke uses dry-run + drops contents: write, docs/providers/
github.md "Preview the next bump" section, verify + PR.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…-run

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@lesnik512 lesnik512 self-assigned this Jun 9, 2026
@lesnik512 lesnik512 merged commit efc5902 into main Jun 9, 2026
6 checks passed
@lesnik512 lesnik512 deleted the feat/action-yml-dry-run branch June 9, 2026 14:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant